avatar

D W

Brick walls are there for a reason, they let us prove how badly we want things.

>

Posts List

Mount Windows Partitions on Ubuntu April 12, 2016
最短路径问题 October 10, 2015
Story Continued – 保研之路 September 28, 2015
Reading Computer Systems(A Programmer’s Perspective):2 August 27, 2015
乘法逆元 Euclid定理和中国剩余定理 August 22, 2015
Reading Computer Systems(A Programmer’s Perspective):1 August 14, 2015
Half Way Conclusion of 3rd Grade in College April 23, 2015
git远程代码管理,SSH还是HTTPS April 5, 2015
Moving My Blog to Octopress April 5, 2015
Monster Storm March 25, 2015
Review VCool Website March 23, 2015
Morris Traversal March 22, 2015
豆瓣笔试 March 20, 2015
LeetCode上面的Distinct Subsequences总结 December 20, 2014
LeetCode上面的WordLadder总结 November 25, 2014
Linux文件系统基础 November 14, 2014
第一篇博客 October 15, 2014
Markdown Style Guide March 3, 2014

Review VCool Website

| Comments

以前做过的一些东西的简单回顾,避免面试官问起来都忘了,也能在简历上面写得更加得心应手

python web.py 网站

接入新浪微博SDK,通过向新浪微博提供的接口(网址)发送GET请求(包含uid和code)得到json格式的返回数据

通过新浪SDK获取需要的信息的步骤

  1. 用户登陆我的网站,点击新浪微博登陆,调到新浪的登陆页面,其中附带有GET的参数 redirect_uri ,用于下一步跳回我的网站
  2. 登陆成功返回我的网站,同时带有GET参数code…
  3. 我用code通过POST方法向新浪申请token,新浪返回一个json格式的数据,里面有token

基本上面三个总结成一句话,我通过和新浪协商好的token向新浪指定的接口(网站)请求我想要的信息

实际上,向新浪微博API请求微博等服务的时候只有access_token这一个参数是必须的,并不需要用户名等其他参数

每次都让用户登录一下执行上面的步骤太麻烦,所以必须把token存起来,每次要用的时候直接通过token向接口请求就好了,token使用cookie保存,存在用户端,是我加密好了的值,我在数据库存另存一份用于比对,用户每次登录我就向用户的浏览器请求token(web.cookies().get()),解密之后得到里面的用户id和存好的token就可以向客户端请求了.

有了上面这些基础知识,就可以详细的理解整个网站的处理流程了

  1. 用户访问VCool主页,由index这个类的GET()方法处理,首先向浏览器请求cookie,如果得到了cookie,直接跳到第3步,没有cookie,执行第2步
  2. 用户的浏览器并没有保存cookie,只能给他看主页,等他点击”通过新浪微博登陆”的按钮进行登录,等他在新浪端登陆完了,回来之后的处理是由callback类进行处理的(就是上面所说的给新浪登陆页面提供的 redirect_uri 填的是’http://1.vcoool.sinaapp.com/callback’)
  3. 这种情况是用户的浏览器保存了cookie,按理说可以直接raise web.seeother(\callback)交给callback处理,因为callback是专门处理登陆后流程的类,但是这样的话会显示此网页包含重定向循环,我也不知道为啥..所以进行下列处理
    1. 通过在cookie里面解码出来的access_token构建一个请求对象
    2. 调用新浪微博API请求用户所关注用户的最新50条微博
    3. 对API返回的json格式数据处理(因为返回的东西有很多,我们只需要有限的信息比如微博内容,图片,作者等..) 4 .使用已经保存到数据库的SVM函数(在callback中已经保存,因为这里浏览器都存了cookie,所以之前肯定已经登录过了)计算得到分类的权值,并进行排序
    4. 字符串处理,因为新浪API返回的是raw字符串,@,##,和链接都不会显示,这里进行正则替换,把他们转换成HTML超链接形式
    5. 把排好序的微博列表通过render.list()方法传入前端模板

callback对象的功能

callback对象是对用户第一次登陆VCool进行处理,就像上面说的,用户在新浪的登陆页面登陆结束后就会redirect到这个函数来处理,同时会用GET方法附带一个code参数,用于我们请求access_token

  1. 接收GET过来的code参数值,没有的话跳转到首页”/”
  2. 通过code向新浪请求参数access_token,expires_in,uid,分别是调用API时要用到的参数,过期时间,登录用户的新浪ID
  3. 根据上面得到的uid(新浪ID)查询一下数据库,如果已经有了相应的项的话就进行更新,如果没有的话就新建一个列表项
  4. 存cookie,把得到的access_token和expired_in等信息加密存一下cookie,以便下一次使用
  5. 后面的功能和3.2-3.6一样了

当前数据库:

1
2
3
4
5
6
7
8
data(weibo_id,reposts,comments,attitudes,text,pic_urls)
    用户喜欢的微博训练集(把用户评论过的微博当做训练集)
dislike(weibo_id,reposts,comments,attitudes,text,pic_urls)
    用户不喜欢的微博训练集(把用户删除的微博当做训练集)
func(weibo_id   a1  a2  a3  a4  a5  b)
    SVM得到的超平面公式
user(weixin_id,weibo_id,access_token,expires_in)
    存储微博账号对应的微信号,连接微博api需要的access_token

Comments